4. Social Network Data Management

Assistant Prof. Dr. Siwachoat Srisuttiyakorn

Department of Educational Research and Psychology
Faculty of Education Chulalongkorn University

2025-01-31

R library

  • xUCINET รองรับการวิเคราะห์เครือข่ายที่มีโครงสร้างซับซ้อน

  • igraph รองรับการวิเคราะห์เครือข่ายและสร้าง visualization ของเครือข่าย

  • statnet library ที่มีฟังก์ชันเชิงสถิติสำเร็จรูปของเครือข่าย

  • Rsiena ใช้วิเคราะห์ dynamic network analysis

Data Storage

CSV หรือ Spreadsheet เป็นรูปแบบทั่วไปที่ใช้เก็บข้อมูลประเภทเครือข่าย

  • ควรจัดเก็บข้อมูลแต่ละเครือข่ายเป็นไฟล์ CSV แยกกัน หรือถ้าเป็น Excel Spreadsheet ก็ควรเก็บแยก sheet

  • ควรมีไฟล์สำหรับเก็บ attribute data ของ node แยกต่างหาก

  • รูปแบบข้อมูลเครือข่าย อาจมี 3 รูปแบบ

    • Adjacency matrix

    • Edgelist

    • Nodelist

Data Storage

  • การตั้งชื่อไฟล์ควรมีรูปแบบการตั้งชื่อที่รัดกุมเพื่อป้องกันความสับสน เช่น ชื่อของไฟล์อาจประกอบด้วย

    • ชื่อแหล่งข้อมูล (ถ้ามี)

    • ชื่อ Project

    • ชื่อเครือข่าย

    • รูปแบบการเก็บข้อมูลเครือข่าย เช่น AM, Edge, Node

Adjacency Matrix Format


Hawthorne_BankWiring$Conflict
   I1 I3 W1 W2 W3 W4 W5 W6 W7 W8 W9 S1 S2 S4
I1  0  0  0  0  0  0  0  0  0  0  0  0  0  0
I3  0  0  0  0  0  0  0  0  0  0  0  0  0  0
W1  0  0  0  0  0  0  0  0  0  0  0  0  0  0
W2  0  0  0  0  0  0  0  0  0  0  0  0  0  0
W3  0  0  0  0  0  0  0  0  0  0  0  0  0  0
W4  0  0  0  0  0  0  1  1  1  0  1  0  0  0
W5  0  0  0  0  0  1  0  1  0  0  0  1  0  0
W6  0  0  0  0  0  1  1  0  1  1  1  1  0  1
W7  0  0  0  0  0  1  0  1  0  1  1  0  0  1
W8  0  0  0  0  0  0  0  1  1  0  1  1  0  1
W9  0  0  0  0  0  1  0  1  1  1  0  1  0  0
S1  0  0  0  0  0  0  1  1  0  1  1  0  0  1
S2  0  0  0  0  0  0  0  0  0  0  0  0  0  0
S4  0  0  0  0  0  0  0  1  1  1  0  1  0  0

เป็นเมทริกซ์สมมาตรหรือไม่ ?

isSymmetric(Hawthorne_BankWiring$Conflict)
[1] TRUE
Hawthorne_BankWiring$Friendship
   I1 I3 W1 W2 W3 W4 W5 W6 W7 W8 W9 S1 S2 S4
I1  0  0  0  0  1  0  0  0  0  0  0  0  0  0
I3  0  0  0  0  0  0  0  0  0  0  0  0  0  0
W1  0  0  0  0  1  1  0  0  0  0  0  1  0  0
W2  0  0  0  0  0  0  0  0  0  0  0  0  0  0
W3  1  0  1  0  0  1  0  0  0  0  0  1  0  0
W4  0  0  1  0  1  0  0  0  0  0  0  1  0  0
W5  0  0  0  0  0  0  0  0  0  0  0  0  0  0
W6  0  0  0  0  0  0  0  0  0  0  0  0  0  0
W7  0  0  0  0  0  0  0  0  0  1  1  1  0  0
W8  0  0  0  0  0  0  0  0  1  0  1  0  0  1
W9  0  0  0  0  0  0  0  0  1  1  0  0  0  1
S1  0  0  1  0  1  1  0  0  1  0  0  0  0  0
S2  0  0  0  0  0  0  0  0  0  0  0  0  0  0
S4  0  0  0  0  0  0  0  0  0  1  1  0  0  0

เป็นเมทริกซ์สมมาตรหรือไม่ ?

isSymmetric(Hawthorne_BankWiring$Friendship)
[1] TRUE

Adjacency Matrix Format

Baker_Journals$CoCitations
     AMH ASW BJSW CAN CCQ CSWJ  CW CYSR  FR IJSW JGSW JSP JSWE PW SCW SSR  SW
AMH   13   0    0   0   0    0   0    0   0    0    0   0    0  0   0   0   3
ASW    0  70    0   0   0    0   0    0   0    0    0   0   18 13   0  21  73
BJSW   0   0   95   0   0    0   0    0   0    0    0   0   13  0   0   0  19
CAN    0   0    0 109   0    0   9    0   0    0    0   0    0  0   6   0   8
CCQ    0   0    0   0  92    0  12    0   0    0    0   0    0  0   3   0   0
CSWJ   0   0    0   0   0   40   0    0   0    0    0   0    0  0  41  20  45
CW     0   0    0   7   0    0 187    6   0    0    0   0   11  7  32  10  58
CYSR   0   0    0  12   5    0  70   26   4    0    0   0    0  6   8  14  28
FR     0   0    0   0   0    0   0    0 205    0    0   0    0  0  18   0   9
IJSW   0   0    0   0   0    0   0    0   0    6    0   0    0  0   0   0   3
JGSW   0   0    0   0   0    0   0    0   0    0    9   0    0  0  18   0  18
JSP    0   0    0   0   0    0   0    0   0    0    0  35    0  0   0   7   0
JSWE   0   9    0   0   0    0   0    0   0    0    0   0  104  0  18  16  58
PW     0   0    0   7   0    0   4    0   0    0    0   0    0  9   0   0   0
SCW    0   8    0   6   0    8  17    0   6    0    6   0   21  0 149  36 124
SSR    0   7    0   0   0    0  17    0   0    0    0   0    9  0  30 105 106
SW     0  15    0   0   0    0  52    0   9    0    0   0   33 19  58  63 366
SWG    0   0    2   0   0    0   0    0   0    0    0   0    9  0   9   7  40
SWHC   0   0    0   0   0    0   0    0   0    0    0   0    0  0  20   0  26
SWRA   0   0    0   0   0    0   8    0   0    0    0   0   24  0   8  39  44
     SWG SWHC SWRA
AMH    0    0    0
ASW    0    0    7
BJSW   0    0    0
CAN    0    0    0
CCQ    0    0    0
CSWJ   0    0    0
CW     0    0    0
CYSR   0    0    6
FR     0    0    0
IJSW   0    0    0
JGSW   0    0    0
JSP    0    0    0
JSWE   0    7   16
PW     0    0    0
SCW    8    6   18
SSR    0    0   25
SW    15   43    8
SWG   41    9    0
SWHC   0   86    0
SWRA   0    0   40

เป็นเมทริกซ์สมมาตรหรือไม่ ?

isSymmetric(Baker_Journals$CoCitations)
[1] FALSE

Checklist สำหรับ adjacency matrix 1

  • ข้อมูลเป็นแบบ one-mode หรือไม่ ถ้าใช่

    • adjacency matrix ต้องเป็น square matrix

    • ให้ตรวจสอบสมาชิกในแนวทแยงมุมของเมทริกซ์

  • Network Direction เครือข่ายเป็นแบบไหน ถ้าเป็นแบบ undirected network แล้ว adjacency matrix เป็นเมทริกซ์สมมาตรหรือไม่

  • Labels ชื่อที่ใช้เป็น label ให้กับ node มีความซ้ำซ้อนกันหรือไม่ ระวังเรื่องการใช้อักขระพิเศษ และหากเป็น one-mode network รายชื่อตามแถวและคอลัมน์เหมือนกันหรือไม่

    • หากต้องการใช้ label เป็นตัวเลข ควรใส่ตัวอักษไว้หน้าตัวเลขด้วย เช่น a1, a2, ...

    • ไม่แนะนำให้ใช้อักขระพิเศษใน label

    • ไม่ควรเว้นช่องว่างใน label หากจำเป็นต้องมีควรใช้เครื่องหมาย _ คั่นกลางระหว่างคำ

    • label ที่เป็นตัวอักษรจะต้องสะกดให้เหมือนกันทุกครั้งในทุกไฟล์ข้อมูล ระวังเรื่องอักษรตัวเล็ก/ใหญ่

Checklist สำหรับ adjacency matrix 2

  • มีปัญหา missing value หรือไม่ ถ้ามีตรวจสอบอีกครั้งว่า missing ที่เกิดขึ้นเป็นเพราะปัญหา non-response หรือเกิดจากการบันทึกหรือจัดการข้อมูล

    • node missing – ไม่ได้ข้อมูลของผู้ตอบหรือ node มาทั้งชุด กรณีนี้ควรรวม node ที่หายไปใน adjacency matrix และแทนที่ missing value ทั้งหมดใน matrix ด้วย NA หรือสัญลักษณ์อื่นที่เหมาะสม

    • edge missing – ข้อมูลที่เก็บรวบรวมมาไม่สมบูรณ์ เช่น อาจมีหน่วยข้อมูลบางหน่วยไม่ตอบแบบสอบถาม หรือความผิดพลาดระหว่างกระบวนการเก็บรวบรวม บันทึก หรือจัดกระทำข้อมูล

  • มีค่าผิดปกติใน matrix หรือไม่ เช่น binary matrix ควรมีค่า 0, 1 หรือ NA ที่ใช้แทน missing value การมีค่าอื่นนอกเหนือจากนี้เป็นไปได้หรือไม่

Edgelist format 1

ชุดข้อมูลเครือข่ายแบบ edgelist ประกอบด้วยตารางข้อมูลที่มีแถวจำนวน n แถว และมีคอลัมน์จำนวนอย่างน้อย 2 คอลัมน์

  • แต่ละแถวแทนคู่ความสัมพันธ์ระหว่าง node ภายใต้เครือข่าย

  • สำหรับ directed network คอลัมน์แรกคือ sender และคอลัมน์ที่สองคือ receiver

  • เราสามารถใส่น้ำหนักหรือค่า attribute ของเส้นเชื่อมในคอลัมน์ที่ 3 ได้

Edgelist format 2

ตัวอย่างการเก็บข้อมูล Hawthorne_BankWiring$Conflict บน edgelist

library(tidyverse)
Hawthorne_BankWiring$Conflict %>% data.frame() %>% 
  rownames_to_column("node1") %>% 
  pivot_longer(cols = -node1, names_to = "node2", values_to = "tie") %>% 
  filter(tie > 0) %>% 
  select(-tie)
# A tibble: 38 × 2
   node1 node2
   <chr> <chr>
 1 W4    W5   
 2 W4    W6   
 3 W4    W7   
 4 W4    W9   
 5 W5    W4   
 6 W5    W6   
 7 W5    S1   
 8 W6    W4   
 9 W6    W5   
10 W6    W7   
# ℹ 28 more rows

Edgelist format 3

ตัวอย่างการเก็บข้อมูล Hawthorne_BankWiring$Conflict บน edgelist

library(tidyverse)
Baker_Journals$CoCitations %>% 
  data.frame() %>% 
  rownames_to_column("node1") %>% 
  pivot_longer(cols = -node1, names_to = "node2", values_to = "num_citation") %>% 
  filter(num_citation > 0)
# A tibble: 107 × 3
   node1 node2 num_citation
   <chr> <chr>        <dbl>
 1 AMH   AMH             13
 2 AMH   SW               3
 3 ASW   ASW             70
 4 ASW   JSWE            18
 5 ASW   PW              13
 6 ASW   SSR             21
 7 ASW   SW              73
 8 ASW   SWRA             7
 9 BJSW  BJSW            95
10 BJSW  JSWE            13
# ℹ 97 more rows

Checklist สำหรับ edgelist

  • รูปแบบ

    • จะอยู่ในรูปแบบ long format โดยมีคอลัมน์อย่างน้อย 2 คอลัมน์

    • ตรวจสอบกรณีที่มีคู่ความสัมพันธ์เดียวกันปรากฎหลายครั้งในชุดข้อมูล ซึ่งอาจเป็นความผิดพลาด หรืออาจเป็นเพราะยังไม่ได้ preprocess ข้อมูล

  • Isolate note การเก็บข้อมูลในรูปแบบ edgelist จะไม่ปรากฏ node ที่เป็น isolate รวมทั้ง missing node ด้วย เนื่องจาก edgelist จะบันทึกเฉพาะคู่ความสัมพันธ์ (ties) เท่านั้น

    • สำหรับ one-mode data คือใส่ self tie ด้วยค่าเท่ากับ 0 ในคอลัมน์ที่

    • เพิ่ม node ที่เป็น isolate ตอนนำข้อมูลเข้าภายหลัง

  • สำหรับ missing data ให้เพิ่มแถวของคู่สัมพันธ์ที่หายไป แล้วใส่ NA ในคอลัมน์ที่ 3

  • undirected or directed network? หากเป็น undirected ลำดับของคู่สัมพันธ์จะไม่มีความแตกต่างกัน ดังนั้นควรปรากฏคู่สัมพันธ์เพียงครั้งเดียว

Nodelist format

nodelist <- Hawthorne_BankWiring$Conflict %>% data.frame() %>% 
  rownames_to_column("node1") %>% 
  pivot_longer(cols = -node1, names_to = "node2", values_to = "tie") %>% 
  filter(tie > 0) %>% 
  select(-tie) %>% 
  group_by(node1) %>% 
  summarise(node2 = list(node2), .groups = "drop")

all_nodes <- tibble(node1 = rownames(Hawthorne_BankWiring$Conflict))
nodelist <- left_join(all_nodes, nodelist, by = "node1") %>%
  mutate(node2 = replace_na(node2, list(character(0)))) 

library(purrr)
nodelist %>%
  mutate(node2_str = map_chr(node2, ~ paste(.x, collapse = ", "))) %>%
  select(node1, node2_str)

Nodelist format

  • ประหยัดพื้นที่มากที่สุด

  • ชื่อแรกแสดงโหนดที่ส่งความสัมพันธ์หรือ ego และชื่อที่ตามมาคือโหนดที่รับความสัมพันธ์หรือ alter

  • เป็นรูปแบบที่รองรับ Isolate – มีชื่อในคอลัมน์แรกและว่างในคอลัมน์ถัดไป

# A tibble: 14 × 2
   node1 node2_str                   
   <chr> <chr>                       
 1 I1    ""                          
 2 I3    ""                          
 3 W1    ""                          
 4 W2    ""                          
 5 W3    ""                          
 6 W4    "W5, W6, W7, W9"            
 7 W5    "W4, W6, S1"                
 8 W6    "W4, W5, W7, W8, W9, S1, S4"
 9 W7    "W4, W6, W8, W9, S4"        
10 W8    "W6, W7, W9, S1, S4"        
11 W9    "W4, W6, W7, W8, S1"        
12 S1    "W5, W6, W8, W9, S4"        
13 S2    ""                          
14 S4    "W6, W7, W8, S1"